iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0

Kubernetes 元件介紹

在了解K8s的功能後,我們就要來了解K8s是使用那些元件來管理容器,就像在docker中有最小的單位container一樣,k8s中的最小單位則是pod,清楚了解每個元件所負責的工作是非常重要的事,有的元件像大腦一樣負責控制和管理,有些則像是四肢負責進行操作完成任務,但只要缺少任何一個元件就可能無法完成任務,因此這個章節會讓大家清楚知道每個元件的功能和如何使用。

在k8s中的元件是可以區分出大小順序的。從小到大排序分為: Pod -> Node -> Controller Plane -> Cluster。

1. Pod

pod 是 Kubernetes 運作的最小單位,一個 Pod 對應到一個應用服務(Application) ,負責裝一個或多個多個 Container (容器),但一般情況一個 Pod 最好只有一個 Container
,同一個 Pod 中的 Containers 共享相同資源及網路,原因是如果每個 Container 都作為 K8S 的最小單位,那麼管理網路會變得非常的困難,以 Pod 來區隔彼此透過 local port number 溝通。

2. Node

Kubernetes 運作的最小硬體單位,一個 Worker Node(簡稱 Node)對應到一台機器,可以是實體機如你的筆電、或是虛擬機如 AWS 上的一台 EC2 或 GCP 上的一台 Computer Engine。
每個 Node 中都有三個組件:kubelet、kube-proxy、Container Runtime。

  • kubelet
    主要為和 Master 溝通的元件,能讀取管理當前Node的狀態

  • kube-proxy
    用來反應 K8S 各個 Node 上的網路服務,並更新 Node 的ip位置

  • Container Runtime
    像是 Docker Engine 的功能,負責執行容器的程式

3. Controller Plane

Kubernetes 運作的指揮中心,可以簡化看成一個特化的 Node 負責管理所有其他 Node。一個 Master Node(簡稱 Master)中有四個組件:kube-apiserver、etcd、kube-scheduler、kube-controller-manager。

kube-apiserver

  • 通過Command Line 下 kubectl 指令讓其他服務可以讀寫 K8S 的資源物件 (Resouce Object),並且能管理所需的api接口。
  • 尤於node彼此間不能互相溝通,必須apiserver完成

etcd

  • 用來存放 Kubernetes Cluster 的資料作為備份,當 Master 因為某些原因而故障時,我們可以透過 etcd 幫我們還
    原 Kubernetes 的狀態

kube-controller-manager

  • 負責管理並運行 Kubernetes controller 的組件,簡單來說 controller 就是 Kubernetes 裡一個個負責監視 Cluster 狀態的 Process,例如:Node Controller、Replication Controller

  • 這些 Process 會在 Cluster 與預期狀態(desire state)不符時嘗試更新現有狀態(current state)。例如:現在要多開一台機器以應付突然增加的流量,那我的預期狀態就會更新成 N+1,現有狀態為 N,這時相對應的 controller 就會想辦法多開一台機器

  • controller-manager 的監視與嘗試更新也都需要透過訪問 kube-apiserver 達成

kube-scheduler

  • 整個 Kubernetes 的 Pods 調度員,scheduler 會監視新建立但還沒有被指定要跑在哪個 Node 上的 Pod,並根據每個 Node 上面資源規定、硬體限制等條件去協調出一個最適合放置的 Node 讓該 Pod 跑

4. Cluster

Kubernetes 中多個 Node 與 Master 的集合。基本上可以想成在同一個環境裡所有 Node 集合在一起的單位。

基本運作
接下來我們用一個簡單的問題「Kubernetes 是如何建立一個 Pod?」來複習整體 Kubernetes 的架構。上圖為一個簡易的 Kubernetes Cluster,通常一個 Cluster 中其實會有多個 Master 作為備援,但為了簡化我們只顯示一個。
當使用者要部署一個新的 Pod 到 Kubernetes Cluster 時,使用者要先透過 User Command(kubectl)輸入建立 Pod 的對應指令(下面會在解說如何實際動手操作來建立一個 Pod)。此時指令會經過一層確認使用者身份的認證後,傳遞到 Master Node 中的 API Server,API Server 會把指令備份到 etcd 。
接下來 controller-manager 會從 API Server 收到需要創建一個新的 Pod 的訊息,並檢查如果資源許可,就會建立一個新的 Pod。最後 Scheduler 在定期訪問 API Server 時,會詢問 controller-manager 是否有建置新的 Pod,如果發現新建立的 Pod 時,Scheduler 就會負責把 Pod 配送到最適合的一個 Node 上面。
雖然上面的基本運作看似複雜,但實際上我們在操作時,只要輸入一行指令後 Kubernetes 就會自動幫我們完成後續的動作。


上一篇
[Day 02] 為什麼要用 Kubernetes?
下一篇
[Day04]K8s Cluster環境-安裝在本地端
系列文
調皮的容器就是要好好管理 - Kubernetes5
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言